package art_of_java_concurrent_programming.concurrent_util.cyclic_barrier;

import java.util.concurrent.CyclicBarrier;

/**
 * CountDownLatch 计数器只能使用一次，
 * CyclicBarrier的计数器可以使用reset()方法重置
 *
 * 假设线程 A 等待线程 B，C，D 完成，那么伪代码如下：
 * CyclicBarrier c = new CyclicBarrier(3, A);
 * B，C，D --> c.await();
 * B，C，D 执行 await() 之后 A 开始执行
 */
public class CyclicBarrierTest {
    static CyclicBarrier c = new CyclicBarrier(2);

    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    c.await();
                } catch (Exception e) {
                }
                System.out.println(1);
            }
        }).start();
        try {
            c.await();
        } catch (Exception e) {
        }
        System.out.println(2);
    }
}